package com.cskaoyan.javase.array._2initialization;

/**
 * @description: 数组的初始化
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import com.sun.media.jfxmedia.events.NewFrameEvent;

/**
 * 类比基本数据类型变量的初始化,数组的初始化需要完成数组的内存空间分配然后给其中的元素赋值
 * 数组的初始化需要完成:
 *      1.要开辟空间存放元素 ---> 需要知道数组的长度
 *      2.元素的取值要明确 ----> 赋值
 *
 * 以上,完成数组的初始化,同样有两种方式:
 * 1.数组的静态初始化,指的是由程序员明确指出数组中的元素
 *  它的语法:
 *          数据类型[] 数组名 = new 数据类型[]{元素1,元素2...};
 *  静态初始化数组可以简写:
 *          数据类型[] 数组名 = {元素1,元素2...};
 *  简写形式必须和声明写在一起,不能使用"数组名={}"的形式
 *
 * 数组对内存空间的要求很高,必须是连续的,所以数组在创建时,它的长度一旦确定就不可更改了
 * 这是数组十分重要的特点,这要求我们在使用数组时,必须严格考量数组的长度
 * 正是因为数组这个限制,所以实际开发中几乎不适用数组作为容器,而是使用集合中的一个类叫ArrayList(ArrayList底层实现仍然是数组,它有下标,有随机访问,但是它没有长度的限制,它是通过将元素放入更长的数组中实现扩容的)
 *
 * 2.数组的动态初始化,指的是仅由程序员告诉数组的长度,元素的取值由系统(JVM)默认决定
 *      也就是说数组中的元素具有默认值
 * 它的语法:
 *      数据类型[] 数组名 = new 数据类型[int类型参数表示数组长度];
 *
 * 3.数组的初始化仅有两种方式,不能"动静结合",不能两种结合使用
 *
 *
 * 数组也好,基本数据类型变量也好,我们一直在说初始化需要开辟内存空间存放它们,实际上是开辟的JVM的内存空间,然后存放它们
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        test();
        //数组静态初始化一个int类型数组
        int[] arr = new int[]{}; //初始化了一个空的数组,是一个长度为0的数组
        int[] arr2 = new int[]{1, 2, 3};
        arr2 = new int[]{666, 777, 888};
        //静态初始化简写
        char[] arr3 = {'a', 'b', 'c'};
        //arr3 = {'a','b','c'};

        //动态初始化一个String数组
        String[] arr4 = new String[10];

        //"动静结合"
        //int[] arr5 = new int[3]{1,2,3};

    }

    public static void test(){
        System.out.println("");
    }
}
